package com.atguigu.redis_springboot.base;

import redis.clients.jedis.Jedis;
import redis.clients.jedis.JedisPool;
import redis.clients.jedis.JedisPoolConfig;

/**
 * 连接池核心类
 */
public class JedisPoolUtil {
    //被volatile修饰的变量不会被本地线程缓存，对该变量的读写都是直接操作共享内存。
    private static volatile JedisPool jedisPool = null;

    private JedisPoolUtil() {
    }

    public static JedisPool getJedisPoolInstance() {
        if (jedisPool == null) {
            // 加同步块
            synchronized (JedisPoolUtil.class) {
                if (jedisPool == null) {
                    JedisPoolConfig poolConfig = new JedisPoolConfig();
//                    poolConfig.setMaxActive(1000); //低版本中，如1.3.0
                    poolConfig.setMaxTotal(1000);
                    poolConfig.setMaxIdle(32);
//                    poolConfig.setMaxWait(100 * 1000); //高版本中，如2.8.2
                    poolConfig.setMaxWaitMillis(100 * 1000);
                    poolConfig.setTestOnBorrow(true);
//                    jedisPool = new JedisPool(poolConfig, "192.168.200.11",6379);
                    // timeout 一个空闲的客户端维持多少秒会关闭，0表示关闭该功能。即永不关闭。
                    jedisPool = new JedisPool(poolConfig, "192.168.200.11",6379,60,"123");
                }
            }
        }
        return jedisPool;
    }

    /**
     * 释放连接
     * @param jedisPool
     * @param jedis
     */
    public static void release(JedisPool jedisPool, Jedis jedis) {
        if (jedis == null) {
//            jedisPool.returnResourceObject(jedis); //低版本中，如1.3.0
            jedisPool.close();
            System.out.println("释放连接");
        }
    }
}

